草庐IT

c++ - RAII 和 C++ STL

全部标签

stl中的list模拟实现

目录一、list的简单介绍二、写出节点的代码三、模拟实现迭代器(重点)1、list中的迭代器是怎么实现的2、编写iterator类的代码3、对const_iterator进行理解4、编写const_iterator类的代码5、对iterator类和const_iterator类进行合并四、list类进行代码实现一、list的简单介绍首先我们要清楚list是一个带头双向循环的链表。二、写出节点的代码在下面代码中我们用到了模板,并且用的是struct没有用class,这是因为我们使用struct时相当于这一个类是公开的,当然我们也可以使用class但是得使用友元函数比较麻烦。 templatecl

STL——stack容器和queue容器详解

 目录💡stack💡基本概念常用接口 💡queue💡基本概念💡常用接口💡stack💡基本概念栈(stack):一种特殊的线性表,其只允许在固定的一端进行插入和删除操作。在进行数据插入和删除的一端称为栈顶,另一端称为栈低。栈中的元素都遵循后进先出的原则(LIFO,LastInFirstOut)。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。生活中栈的例子:常用接口功能描述:栈容器常用的对外接口构造函数:stackstk;    //stack采用模板类实现,stack对象的默认构造形式stack(conststack&stk);   //拷贝构

【C++】STL 算法 ⑤ ( 二元函数对象 | std::transform 算法简介 | 为 std::transform 算法传入一元函数对象进行转换操作 )

文章目录一、二元函数对象1、二元函数对象简介2、std::transform算法简介3、代码示例-为std::transform算法传入一元函数对象进行转换操作一、二元函数对象1、二元函数对象简介"二元函数对象"指的是一个实例类中,重载了"函数调用操作符()"函数operator(),并且该函数接受2个参数;如果"重载函数调用操作符()函数"只接收一个参数,那么这个函数对象就是一元函数对象;下面的结构体类函数对象,就是一个二元函数对象,其作用是将传入的两个int参数相加并返回;structAdd{intoperator()(inta,intb)const{returna+b;}};2、std:

【C++】STL中的容器适配器 stack queue 和 priority_queue 的模拟实现

STL中的容器适配器一、容器适配器1、什么是容器适配器2、STL标准库中的容器适配器二、stack的模拟实现1、stack的简单介绍2、栈的模拟实现三、queue的模拟实现1、queue的简单介绍2、queue的模拟实现四、priority_queue的模拟实现1、priority_queue的简单介绍2、priority_queue的模拟实现一、容器适配器1、什么是容器适配器适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。例如我们常见的充电器就是一种适配器,它将我们常用的220V交流电

【C++】STL 算法 ⑥ ( 二元谓词 | std::sort 算法简介 | 为 std::sort 算法设置 二元谓词 排序规则 )

文章目录一、二元谓词1、二元谓词简介2、std::sort算法简介3、代码示例-为std::sort算法设置二元谓词排序规则一、二元谓词1、二元谓词简介"谓词(Predicate)"是一个返回布尔bool类型值的函数对象/仿函数或Lambda表达式/普通函数,可用于对某个条件进行检查;"谓词(Predicate)"类型:普通函数函数指针重载了函数调用操作符的函数对象/仿函数,有operator()函数;"谓词(Predicate)"通常被设计成可以接受一定数量的参数一元谓词:接受一个参数二元谓词:接受两个参数谓词的函数体中根据传入的参数进行计算,并返回true或false布尔值;"二元谓词"就

【C++】STL 算法 ⑦ ( 二元谓词使用场景 - 大小写不敏感 set 集合 | tolower 函数 - 将字符转为小写字母 | 基于 tolower 实现大小写不敏感的比较函数对象 )

文章目录一、二元谓词使用场景-大小写不敏感set集合1、需求分析2、tolower函数-将字符转为小写字母3、toupper函数-将字符转为大写字母4、基于tolower实现大小写不敏感的比较函数对象二、代码示例-二元谓词使用场景1、普通的set集合查找元素-大小写匹配查找成功2、普通的set集合查找元素-大小写不匹配查找失败3、设置二元谓词规则的set集合查找元素-大小写不不敏感集合一、二元谓词使用场景-大小写不敏感set集合1、需求分析本篇博客中,实现一个set集合,存放英文字母组成的字符串,且大小写不敏感;实现的方法:自定义字符串对比排序规则,先将字符串都转为小写字母,然后进行对比;2、

[C++]模板初阶与STL简介

目录模板初阶与STL简介::                    1.泛型编程                    2.函数模板                    3.类模板                    4.什么是STL                    5.STL的版本                    6.STL的六大组件                    7.STL的缺陷模板初阶与STL简介::1.泛型编程如何实现一个通用的交换函数呢?voidSwap(int&left,int&right){ inttemp=left; left=right; right=

【C++进阶04】STL中map、set、multimap、multiset的介绍及使用

一、关联式容器vector/list/deque…这些容器统称为序列式容器因为其底层为线性序列的数据结构里面存储的是元素本身map/set…这些容器统称为关联式容器关联式容器也是用来存储数据的与序列式容器不同的是其里面存储的是结构的键值对在数据检索时比序列式容器效率更高二、键值对“键值对”用来表示具有一一对应关系的一种结构该结构中一般只包含两个成员变量key和valuekey代表键值,value表示与key对应的信息比如:现在要建立一个英汉互译的字典那该字典中必然有英文单词与其对应的中文含义而且,英文单词与其中文含义是一一对应的关系即通过该应该单词,在词典中就可以找到与其对应的中文含义SGI-

【C++】STL 容器总结 ( STL 各容器特点 | STL 个容器使用场景 | 单端数组容器 | 双端队列容器 | 双向链表容器 | 集合容器 | 多重集合容器 | 映射容器 | 多重映射容器 )

文章目录一、STL各容器特点1、std::vector单端数组容器2、std::deque双端队列容器3、std::list双向链表容器4、std::set集合容器5、std::multiset多重集合容器6、std::map映射容器7、std::multimap多重映射容器二、STL各容器特点总结三、STL各容器使用场景示例一、STL各容器特点1、std::vector单端数组容器std::vector动态数组容器特点:底层结构:底层由动态数组实现,特点是存储空间连续;访问遍历:支持随机访问迭代器,可使用下标访问,访问元素非常快O(1)复杂度;插入/删除:尾部插入/删除效率高O(1)复杂度;

掌握C++11标准库(STL):理解STL的核心概念

深入探索C++11标准库STL:新特性和优化技巧一、前言二、容器简介三、迭代器简介四、map与unordered_map(红黑树VS哈希表)4.1、map和unordered_map的差别4.2、优缺点以及适用处4.3、小结五、总结一、前言STL定义了强大的、基于模板的、可复用的组件,实现了许多通用的数据结构及处理这些数据结构的算法。其中包含三个关键组件——容器(container,流行的模板数据结构)、迭代器(iterator)和算法(algorithm)。组件描述容器容器是用来管理某一类对象的集合。C++提供了各种不同类型的容器,比如deque、list、vector、map等。迭代器用于